/* 把二叉树所有节点左右子树交换 */

#include <iostream>
#include "BiTreefun.h"
using namespace std;

// 前序遍历
void pre(BTNode *T)
{
  // 二叉树不为空
  if (T != NULL)
  {
    // 打印根结点
    cout << T->data << " ";
    
    // 打印左子树
    pre(T->lchild);
    
    // 打印右子树
    pre(T->rchild);
  }
}

// 所有节点左右子树交换
void swap(BTNode *p)
{
  // 二叉树不为空
  if (p != NULL)
  {
    // 针对左子树进行交换
    swap(p->lchild);
    
    // 针对右子树进行交换
    swap(p->rchild);
    
    // 交换左右结点
    BTNode *temp = p->lchild;
    p->lchild = p->rchild;
    p->rchild = temp;
  }
}

int main()
{
  // 创建二叉树
  BTNode *T = create_bitree();
  
  // 前序遍历并打印
  cout << "前序遍历的结果为:";
  pre(T);
  
  // 所有结点左右子树交换
  swap(T);
  
  // 前序遍历并打印
  cout << endl
       << "交换后的结果为：:";
  pre(T);
}